#/bin/bash
#Variaveis do programa
tempfile=`tempfile 2>/dev/null` || tempfile=fifo/test$$
trap "rm -f $tempfile" 0 1 2 5 15
DATABASE=$(cat conf/database)			#contem o caminho para a base de dados
export MYSQL_TABLE=mib2_iftable
FIFO="fifo/tmp-mysql-mib2-$$"			#FIFO que estaremos utilizando

dialog --shadow --backtitle "SNMPGrab" --nocancel\
	--msgbox "Script para obtencao de dados de equipamentos com MIB-2" 0 0

#verifica se temos um argumento (um ip)
#note que somente verificamos se o temos, nao se ele é valido!!
ARGV="$@"
if [ "x$ARGV" = "x" ] ; then 
dialog --shadow --backtitle "SNMPGrab" --nocancel\
	--msgbox "  ERRO! Endereco de IP invalido, ou nenhum endereco ip fornecido!" 0 0
	exit 0;
fi

#prepara o script para interceptar os comandos de interrupcao
trap "x=1" SIGINT
x=0

#cria um fifo para poder utilizar a base de dados em modo "persistente"
dialog --shadow --backtitle "SNMPGrab" --nocancel\
	--infobox "Criando FIFO para acesso a base de dados" 0 0

mkfifo $FIFO

#abre a conexao propriamente dita com a base de dados
dialog --shadow --backtitle "SNMPGrab" --nocancel\
	--infobox "Criando conexao com a base de dados ($DATABASE), usando tabela ($MYSQL_TABLE)" 0 0
cat <> $FIFO | mysql -h $DATABASE -u @ testes_alvarion &
sleep 5

#lista as portas disponiveis, e dá a escolha ao usuario de qual monitorar...
echo "Por favor, escolha qual porta deseja monitorar:"
snmpwalk -v 1 -Onq -c public $ARGV .1.3.6.1.2.1.2.2.1.2 | cut -b 22- 
read porta


#aguarda o linktest se iniciar
dialog --shadow --backtitle "SNMPGrab" --nocancel\
	--infobox "Aguarde, iniciando..." 0 0
sleep 5

#indica o inicio do processo de medicao
echo "Medicao iniciada, se nenhum erro ocorrer,"
echo "os dados estao sendo escritos no banco de dados ($DATABASE)"

export SUMAC=$(snmpget -O0qv -v 1 -c public $ARGV .1.3.6.1.2.1.2.2.1.6.$porta | cut -b 1-2,4-5,7-8,10-11,13-14,16-17)

#loop principal do programa...
while [ ${x} -eq 0 ]
do
	#pega a timestamp.. desnecessario, mas usamos ela para mostrar o que acontece
	timestamp=$(date +%Y%m%d%H%M%S)
	#pega TODOS os outros valores, numa query s�..
	snmpget -Oeqv -v 1 -c public $ARGV \
	ifIndex.$porta \
	ifDescr.$porta \
	ifType.$porta \
	ifMtu.$porta \
	ifSpeed.$porta \
	ifAdminStatus.$porta \
	ifOperStatus.$porta \
	ifInOctets.$porta \
	ifInUcastPkts.$porta \
	ifInNUcastPkts.$porta \
	ifInDiscards.$porta \
	ifInErrors.$porta \
	ifInUnknownProtos.$porta \
	ifOutOctets.$porta \
	ifOutUcastPkts.$porta \
	ifOutNUcastPkts.$porta \
	ifOutDiscards.$porta \
	ifOutErrors.$porta \
	ifOutQLen.$porta \
	| bin/wrapper_snmpget.awk 2>/dev/null >> $FIFO

	echo $timestamp, $ARGV, $SUMAC
	#completa 1 segundo +-, antes de comecar a nova medi�o...
	usleep 900000
done

#matando o processo do CAT original...
dialog --shadow --backtitle "SNMPGrab" --nocancel\
	--infobox "Finalizando conexao com a base de dados..." 0 0
kill -9 `ps | grep cat | cut -b 1-5`

#remove o fifo que criamos inicialmente
dialog --shadow --backtitle "SNMPGrab" --nocancel\
	--infobox "Removendo FIFO..." 0 0
rm -rf $FIFO

#that's all, folks!
dialog --shadow --backtitle "SNMPGrab" --nocancel\
	--infobox "Script finalizado com sucesso" 0 0
exit 0
